// 入口文件
const Koa = require('koa2')
const path = require('path')
const cors = require('koa2-cors') // 引入跨域模块
const static = require('koa-static') // 引入读取静态资源模块
const router = require('./router') // 引入路由入口文件
const jwt = require('koa-jwt') // 鉴权token
const jsonerror = require('koa-json-error') // 错误模块

const { token_controller } = require('./utils/token_controller.js') // token鉴权方法

const bodyparser = require('koa-bodyparser')
const koabody = require('koa-body')

const port = 3000 // 监听的端口号

// 实例化 Koa 对象
const app = new Koa()

// 错误处理中间件
app.use( jsonerror() )

/**
 * 为了获取post传递过来的参数
 * bodyparser获取不到form-data格式的参数，
 * 所以添加koa-body中间件
 */
app.use( bodyparser(  ), koabody({ multipart: true }) );

app.use( static( path.join( __dirname, '/assets' ) ) ) // 可读取静态资源文件

app.use( cors() ) // 允许后端跨域

// token鉴权
app.use( token_controller )

app.use( jwt( { secret: 'jdf_token' } ).unless( { path: [ '/home', '/favicon.ico', '/login/register' ] } ) )

/**
 * router.routes() -> 启动路由
 * router.allowedMethods() -> 允许路由使用的方法(get, post...)
 */
app.use( router.routes(), router.allowedMethods() )

// 监听端口
app.listen( port, () => {
    console.log( `server is running: http://localhost:${ port }` )
} );
